#include <stdio.h>

//struct S
//{
//	int a;
//	char c;
//	double d;
//};
//
//void Init(struct S* ps)
//{
//	ps->a = 100;
//	ps->c = 'w';
//	ps->d = 3.14;
//}
//
////传值
//void Print1(struct S tmp)
//{
//	printf("%d %c %lf\n", tmp.a, tmp.c, tmp.d);
//}
//
////传址
//void Print2(const struct S* ps)
//{
//	printf("%d %c %lf\n", ps->a, ps->c, ps->d);
//}
//
//int main()
//{
//	struct S s = { 0 };
//	Init(&s);
//	Print1(s);
//	Print2(&s);
//	//s.a = 100;
//	//s.c = 'w';
//	//s.d = 3.14;
//
//	//printf("%d\n", s.a);
//	
//	return 0;
//}

//位段 - 二进制位

//struct S
//{
//	int _a : 2;//2-4
//	int _b : 5;
//	int _c : 10;
//	int _d : 30;
//};

//struct S
//{
//	char a : 3;
//	char b : 4;
//	char c : 5;
//	char d : 4;
//};
//
////47bit - 6个字节* 8 = 48bit
//
//int main()
//{
//	struct S s = { 0 };
//	s.a = 10;
//	s.b = 20;
//	s.c = 3;
//	s.d = 4;
//	printf("%d\n", sizeof(s));//8个字节
//
//	return 0;
//}

//枚举类型
//enum Sex
//{
//	//枚举的可能取值-枚举常量
//	MALE,
//	FEMALE = 9,
//	SECRET
//};

//enum Color
//{
//	RED,//0
//	YELLOW,//1
//	BLUE//2
//};
////
//
////C语言的源代码---->可执行程序
//#define RED 0
//#define GREEN 1
//#define BLUE 2
//
//int main()
//{
//	//enum Sex s = MALE;
//
//	//enum Color c = 2;//int
//	
//	int Color = RED;
//
//	//BLUE = 0;
//	//printf("%d %d %d\n", RED, YELLOW, BLUE);
//	//printf("%d %d %d\n", MALE, FEMALE, SECRET);
//	return 0;
//}

//联合-联合体-共用体

//union Un
//{
//	char c;//1
//	int i;//4
//};
////5个字节
////
//int main()
//{
//	union Un u;
//
//	printf("%d\n", sizeof(u));
//	printf("%p\n", &u);
//	printf("%p\n", &(u.c));
//	printf("%p\n", &(u.i));
//
//	return 0;
//}

//int check_sys()
//{
//	int a = 1;
//	//返回1，表示小端
//	//返回0，表示大端
//
//	return *(char*)& a;
//}

//int check_sys()
//{
//	union
//	{
//		char c;
//		int i;
//	}u;
//
//	u.i = 1;
//
//	//返回1，表示小端
//	//返回0，表示大端
//	return u.c;
//}
//
//int main()
//{
//	int a = 1;
//	int ret = check_sys();
//
//	if (ret == 1)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//
//	//int a = 0x11223344;
//	//
//	////低地址 --------------------------------------------------------> 高地址
//	////.......[][][][][][11][22][33][44][][][][][][][]....... 大端字节序存储模式
//	////.......[][][][][][44][33][22][11][][][][][][][]....... 小端字节序存储模式
//	////讨论一个数据，放在内存中的存放的字节顺序
//	////大小端字节序问题
//	////
//	return 0;
//}

union Un1
{
	char c[5];
	int i;
};
union Un2
{
	short c[7];
	int i;
};


int main()
{
	printf("%d\n", sizeof(union Un1));
	printf("%d\n", sizeof(union Un2));

	return 0;
}